const logModel = require('../models/log.js');
const yapi = require('../yapi.js');
const baseController = require('./base.js');
const groupModel = require('../models/group');
const projectModel = require('../models/project');
const interfaceModel = require('../models/interface');

class logController extends baseController {
  constructor(ctx) {
    super(ctx);
    this.Model = yapi.getInst(logModel);
    this.groupModel = yapi.getInst(groupModel);
    this.projectModel = yapi.getInst(projectModel);
    this.interfaceModel = yapi.getInst(interfaceModel);
    this.schemaMap = {
      listByUpdate: {
        "*type": 'string',
        "*typeid": 'number',
        "apis": [{
          method: 'string',
          path: 'string'
        }]
      }
    }

  }

  /**
   * 获取动态列表
   * @interface /log/list
   * @method GET
   * @category log
   * @foldnumber 10
   * @param {Number} typeid 动态类型id， 不能为空
   * @param {Number} [page] 分页页码
   * @param {Number} [limit] 分页大小
   * @returns {Object}
   * @example /log/list
   */

  async list(ctx) {
    let typeid = ctx.request.query.typeid,
      page = ctx.request.query.page || 1,
      limit = ctx.request.query.limit || 10,
      type = ctx.request.query.type,
      interfaceId = ctx.request.query.interface_id;
    if (!typeid) {
      return ctx.body = yapi.commons.resReturn(null, 400, 'typeid不能为空');
    }
    if (!type) {
      return ctx.body = yapi.commons.resReturn(null, 400, 'type不能为空');
    }
    try {
      if (type === "group") {
        let projectList = await this.projectModel.list(typeid);
        let projectIds = [], projectDatas = {};
        for (let i in projectList) {
          projectDatas[projectList[i]._id] = projectList[i];
          projectIds[i] = projectList[i]._id;
        }
        let projectLogList = await this.Model.listWithPagingByGroup(typeid, projectIds, page, limit);
        projectLogList.forEach((item, index) => {
          item = item.toObject();
          if (item.type === 'project') {
            item.content = `在 <a href="/project/${item.typeid}">${projectDatas[item.typeid].name}</a> 项目: ` + item.content;
          }
          projectLogList[index] = item;
        })
        let total = await this.Model.listCountByGroup(typeid, projectIds);
        ctx.body = yapi.commons.resReturn({
          list: projectLogList,
          total: Math.ceil(total / limit)
        });
      } else if (type === "project") {
        let result = await this.Model.listWithPaging(typeid, type, page, limit, interfaceId);
        let count = await this.Model.listCount(typeid, type, interfaceId);

        ctx.body = yapi.commons.resReturn({
          total: Math.ceil(count / limit),
          list: result
        });
      }

    } catch (err) {
      ctx.body = yapi.commons.resReturn(null, 402, err.message);
    }
  }
  /**
  * 获取特定cat_id下最新修改的动态信息
  * @interface /log/list_by_update
  * @method post
  * @category log
  * @foldnumber 10
  * @param {Number} typeid 动态类型id， 不能为空
  * @returns {Object}
  * @example /log/list
  */

  async listByUpdate(ctx) {
    let params = ctx.params;

    try {
      let { typeid, type, apis } = params
      let list = []
      let projectDatas = await this.projectModel.getBaseInfo(typeid, 'basepath');
      let basePath = projectDatas.toObject().basepath
      

      for (let i = 0; i < apis.length; i++) {
        let api = apis[i];
        if (basePath) {
          api.path = api.path.indexOf(basePath) === 0 ? api.path.substr(basePath.length) : api.path;
        }
        let interfaceIdList = await this.interfaceModel.getByPath(typeid, api.path, api.method, '_id');
       
        for (let j = 0; j < interfaceIdList.length; j++) {
          let interfaceId = interfaceIdList[j];
          let id = interfaceId.id
          let result = await this.Model.listWithCatid(typeid, type, id);

          list = list.concat(result);
        }
      }

      // let result = await this.Model.listWithCatid(typeid, type, catId);
      ctx.body = yapi.commons.resReturn(list);
    } catch (err) {
      ctx.body = yapi.commons.resReturn(null, 402, err.message);
    }
  }

}

module.exports = logController;